package com.ktjy.controller;


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ktjy.pojo.SysRight;
import com.ktjy.pojo.SysRole;
import com.ktjy.service.ISysRightService;
import com.ktjy.service.ISysRoleService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author jjx
 * @since 2025-01-09
 */
@Controller
@RequestMapping("/role")
public class SysRoleController {
    Logger logger = LoggerFactory.getLogger(SysRoleController.class);
    @Autowired
    ISysRoleService iSysRoleService;
    @Autowired
    ISysRightService iSysRightService;

    @RequestMapping("/findAll")
    @ResponseBody
    public Object findAll(){
        return  iSysRoleService.list();
    }

    @RequestMapping("/list")
    public String list(SysRole sysRole,
                       @RequestParam(value = "pageIndex", defaultValue = "1") Integer pageIndex,
                       @RequestParam(value = "pageSize", defaultValue = "5") Integer pageSize,
                       Model model) {
        try {
            //构造分页条件
            Page page=new Page(pageIndex,pageSize);
            //构造过滤条件
            QueryWrapper qw=new QueryWrapper();
            if(sysRole.getRoleName()!=null && !sysRole.getRoleName().equals("")){
                qw.like("role_name",sysRole.getRoleName());
            }
            IPage<SysRole> pager = iSysRoleService.page(page, qw);
            model.addAttribute("pager", pager);

            //回显数据
            model.addAttribute("condition", sysRole);
        } catch (Exception e) {
            logger.error("SysUserController 中的 list 方法执行发生错误。 ", e);
            throw new RuntimeException(e);
        }
        return "role/list";
    }

    /**
     * 跳转到新增页面
     *
     * @return
     */
    @GetMapping("/add")
    public String add(Model model) {
        try {
            //查询所有的权限
            List<SysRight> list = iSysRightService.list();
            model.addAttribute("rights",list);
            return "role/add";
        } catch (Exception e) {
            logger.error("SysUserController 中的 add 方法执行发生错误。", e);
            throw new RuntimeException(e);
        }
    }

    @PostMapping("/save")
    public String save(SysRole sysRole,@RequestParam("rightCodes") String[] rightCodes) {
        try {
            boolean ok = iSysRoleService.save(sysRole,rightCodes);
            if (ok) {
                //跳转到列表;重定向到分页方法
                return "redirect:/role/list";
            } else {
                //跳回新增页面
                return "role/add";
            }
        } catch (Exception e) {
            logger.error("SysUserController 中的 save 方法执行发生错误。 ", e);
            throw new RuntimeException(e);
        }
    }

    /**
     * 跳转修改页面
     *
     * @param id
     * @param model
     * @return
     */
    @GetMapping("/edit")
    public String edit(@RequestParam("id") Long id, Model model) {
        try {
            //查询角色信息
            SysRole sysRole = iSysRoleService.getById(id);
            model.addAttribute("role", sysRole);
            //当前角色所拥有的权限信息
            List<SysRight> roleRights = iSysRightService.findByRoleId(id);
            model.addAttribute("roleRights",roleRights);

            //查询所有的权限
            List<SysRight> list = iSysRightService.list();
            model.addAttribute("rights",list);
        } catch (Exception e) {
            logger.error("SysUserController 中的 toEdit 方法执行发生错误。", e);
            throw new RuntimeException(e);
        }
        return "role/edit";
    }

    @PostMapping("/update")
    public String update(SysRole sysRole,@RequestParam("rightCodes") String[] rightCodes) {
        try {
            boolean ok = iSysRoleService.update(sysRole,rightCodes);
            if (ok) {
                //跳转到列表;重定向到分页方法
                return "redirect:/role/list";
            } else {
                //跳回新增页面
                return "role/edit";
            }
        } catch (Exception e) {
            logger.error("SysUserController 中的 update 方法执行发生错误。 ", e);
            throw new RuntimeException(e);
        }
    }


    @DeleteMapping("/del/{id}")
    @ResponseBody
    public Object del(@PathVariable("id") Long id) {
        Map<String, Object> map = new HashMap<>();
        try {
            boolean ok = iSysRoleService.delete(id);  //调用service的方法进行数据删除
            if (ok) {
                map.put("delResult", true);
            } else {
                map.put("delResult", false);
            }
        } catch (Exception e) {
            logger.error("SysUserController 中的 del 方法执行发生错误。", e);
            map.put("delResult", false);
        }
        return map;
    }
}
